import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:1.原地移除数组中所有的元素val，要求时间复杂度为O(N)，空间复杂度为O(1)
 * User: 杨已萱
 * Date: 2023-04-17
 * Time: 22:58
 */
public class Test {
    public int[] ints = new int[5];
    public int usedSize;

//    public void print(){
//        for (int i = 0; i < usedSize; i++) {
//            System.out.println(this.ints[i]);
//        }
//    }

    public int size2() {
        return usedSize;
    }
// 获取顺序表长度
   public int size() {
       return ints.length;
   }
    /**
     * 删除第一次出现的关键字key 图书写过 往前盖！
     * @param key
     */

    public boolean remove(int key) {
        int id = indexOf(key);
        if(id != -1){
            for (int i = id; i < usedSize-1; i++) {
                this.ints[i] = this.ints[i+1];//不小心写成[id] [id+1]了！调试！
            }
            usedSize--;
            return true;
            }
        System.out.println("没有这个数据！");
        return false;
        }
    // 获取 pos 位置的元素
    public int get(int pos) {//void 稍微不妥 万一我想用这个数字计算，没有返回值的话拿不到数据
        if (checkPosInAdd(pos)){
           return ints[pos];
        }else {
            return  999999999;
        }
    }
    // 给 pos 位置的元素设为【更新为】 value
    public void set(int pos, int value) {
        if (checkPosInAdd(pos)){
            ints[pos] = value;
        }else {
            System.out.println("pos 不合法！");
        }
    }
    // 查找某个元素对应的位置
    public int indexOf(int toFind) {
        for (int i = 0; i < usedSize; i++) {
            if (ints[i] == toFind){
                return i;
            }
        }
        return -1;
    }
    // 判定是否包含某个元素
    public boolean contains(int toFind) {
        for (int i = 0; i < usedSize; i++) {
            if (ints[i] == toFind){
                return true;
            }
        }
        return false;
    }
    // 在 pos 位置新增元素  之后的数据后移
//    检查位置合法性 再检查是否满了
    public void add(int pos, int data) {
       if( checkPosInAdd(pos)){
//           for (int i = pos; i <= usedSize ; i++) {  应该从数组最后一位开始移
//               ints[i+1] 要是从POS+1开始将覆盖原有数据！
//           }
           if (isFull()) {
               this.ints =Arrays.copyOf(this.ints,2*this.ints.length);

               for (int i = usedSize - 1; i >= pos; i--) {
                   this.ints[i + 1] = this.ints[i];
               }
               ints[pos] = data;
               usedSize++;
           }else {
               for (int i = usedSize - 1; i >= pos; i--) {
                   this.ints[i + 1] = this.ints[i];
               }
               usedSize++;
           }
       }else {
           System.out.println("pos 不合法！");
           return;
       }
    }

    //检查位置合法性 必须有前后驱 只能挨着放
private boolean checkPosInAdd(int pos) {
    if (pos < 0 || pos > usedSize){
        return false;
    }
    return true;//合法
}
    /**
     * 打印顺序表:
     *   根据usedSize判断即可
     */
    public void display() {
        for (int i = 0; i < usedSize; i++) {
            System.out.println(ints[i]);
        }
    }
    // 新增元素,默认在数组最后新增
     public void add(int value){
        boolean full = isFull();//判满
        if (full){//扩容
            this.ints =Arrays.copyOf(this.ints,2*this.ints.length);//2倍
        }
        this.ints[usedSize] = value;
        usedSize++;
    }
    /**
     * 判断当前的顺序表是不是满的！
     * @return true:满   false代表空
     */
    public boolean isFull(){
        if(this.usedSize == this.ints.length){
            return true;
        }
        return  false;
    }

    public void clear(){
        usedSize = 0;
    }

}
